package com.project_doctor.handler;


import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Set;

/**
 * 书籍的任务类
 */
@Component
@EnableScheduling   //开启计划任务
@Slf4j   //记录日志
public class CacheUpdateTask {

    @Autowired
    private RedisTemplate redisTemplate;


    /**
     * 更新热销榜和分类的Redis中数据
     */
    @Scheduled(cron = "0 0 3 * * ?")  // 每天凌晨3点执行，更新库存
//    @Scheduled(cron = "*/5 * * * * ?")  //测试：每过10秒执行一次
    public void updateHotSelling() {
//        //1.删除所有以 "book:list" 开头的键
//        deleteKeysWithPattern(RedisConst.BOOK_LIST + "*");
//
//        //2.重新查询热销榜的数据到Redis中，步骤3已经包含，可以省略；
//        //bookService.getBookTypeById(BookConst.TOP_TYPEID,BookConst.FIRST_PAGE, BookConst.PAGE_SIZE);
//
//        //3.查询所有的分类，将每个分类首页都更新到Redis中
//        deleteKeysWithPattern(RedisConst.BOOK_TYPE_LIST + "*");
//        List<BookType> bookTypes = bookTypeService.findAll();
//        bookTypes.forEach(bookType -> {
//            bookService.getBookTypeById( bookType.getId(),BookConst.FIRST_PAGE, BookConst.PAGE_SIZE);
//        });
//        //3.记录日志
//        log.info("成功更新图书类型的Redis中数据");
    }

    /**
     * 删除符合给定模式的key
     */
    public void deleteKeysWithPattern(String pattern) {
        //1. 获取所有符合这个模式的键
        Set<String> keys = redisTemplate.keys(pattern);
        //2.遍历并且删除这些键
        keys.forEach(key -> {
            redisTemplate.delete(key);
            log.info("删除键: {}", key);
        });
    }
}